pull: Don't do deltas with --commit-metadata-only
authorColin Walters <walters@verbum.org>
Tue, 1 Nov 2016 20:39:58 +0000 (16:39 -0400)
committerAtomic Bot <atomic-devel@projectatomic.io>
Fri, 4 Nov 2016 16:04:23 +0000 (16:04 +0000)
We should just download the commit objects directly, as it's
obviously a lot more efficient than deltas.

I had to generate a summary file in more places in the tests,
since once created, it needs to be updated.

Closes: https://github.com/ostreedev/ostree/issues/528
Closes: #566
Approved by: jlebon

src/libostree/ostree-repo-pull.c
tests/pull-test.sh

index 359660bb440098bba106abae9a9527deb1c43441..1f57b133426d9c165b45286b2ef158a27394050f 100644 (file)
@@ -2926,7 +2926,7 @@ ostree_repo_pull_with_options (OstreeRepo             *self,
                                     &from_revision, error))
         goto out;
 
-      if (!disable_static_deltas && !mirroring_into_archive &&
+      if (!(disable_static_deltas || mirroring_into_archive || pull_data->is_commit_only) &&
           (from_revision == NULL || g_strcmp0 (from_revision, to_revision) != 0))
         {
           if (!request_static_delta_superblock_sync (pull_data, from_revision, to_revision,
index b050e111011f3776ba2a43de25c60805f8bccc15..408d05392579f2860f46520734ce415874e398e5 100755 (executable)
@@ -35,7 +35,7 @@ function verify_initial_contents() {
     assert_file_has_content baz/cow '^moo$'
 }
 
-echo "1..12"
+echo "1..13"
 
 # Try both syntaxes
 repo_init
@@ -63,11 +63,27 @@ $OSTREE --repo=ostree-srv/gnomerepo checkout main checkout-origin-main
 echo moomoo > checkout-origin-main/baz/cow
 ${CMD_PREFIX} ostree --repo=ostree-srv/gnomerepo commit -b main -s "" --tree=dir=checkout-origin-main
 ${CMD_PREFIX} ostree --repo=ostree-srv/gnomerepo static-delta generate main
+${CMD_PREFIX} ostree --repo=ostree-srv/gnomerepo summary -u
 ${CMD_PREFIX} ostree --repo=ostree-srv/gnomerepo fsck
 ${CMD_PREFIX} ostree --repo=mirrorrepo pull --mirror origin main
 ${CMD_PREFIX} ostree --repo=mirrorrepo fsck
 echo "ok pull mirror (should not apply deltas)"
 
+cd ${test_tmpdir}
+rm mirrorrepo/refs/remotes/* -rf
+${CMD_PREFIX} ostree --repo=mirrorrepo prune --refs-only
+${CMD_PREFIX} ostree --repo=mirrorrepo pull origin main
+rm checkout-origin-main -rf
+$OSTREE --repo=ostree-srv/gnomerepo checkout main checkout-origin-main
+echo yetmorecontent > checkout-origin-main/baz/cowtest
+${CMD_PREFIX} ostree --repo=ostree-srv/gnomerepo commit -b main -s "" --tree=dir=checkout-origin-main
+rev=$(${CMD_PREFIX} ostree --repo=ostree-srv/gnomerepo rev-parse main)
+${CMD_PREFIX} ostree --repo=ostree-srv/gnomerepo static-delta generate main
+${CMD_PREFIX} ostree --repo=ostree-srv/gnomerepo summary -u
+${CMD_PREFIX} ostree --repo=mirrorrepo pull --commit-metadata-only origin main
+assert_has_file mirrorrepo/state/${rev}.commitpartial
+echo "ok pull commit metadata only (should not apply deltas)"
+
 cd ${test_tmpdir}
 mkdir mirrorrepo-local
 ${CMD_PREFIX} ostree --repo=mirrorrepo-local init --mode=archive-z2
@@ -79,6 +95,7 @@ echo "ok pull local mirror"
 
 cd ${test_tmpdir}
 ${CMD_PREFIX} ostree --repo=ostree-srv/gnomerepo commit -b main -s "Metadata string" --add-detached-metadata-string=SIGNATURE=HANCOCK --tree=ref=main
+${CMD_PREFIX} ostree --repo=ostree-srv/gnomerepo summary -u
 ${CMD_PREFIX} ostree --repo=repo pull origin main
 ${CMD_PREFIX} ostree --repo=repo fsck
 $OSTREE show --print-detached-metadata-key=SIGNATURE main > main-meta